home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_052 / poly / poly.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  3KB  |  143 lines

  1. /****************************************************************
  2.  * Polygon drawing demo © 1987 John M. Olsen.
  3.  * This demo uses the AreaMove, AreaDraw and AreaEnd Functions.
  4.  * It uses a window on the workbench screen, and the polygons can be
  5.  * any of the possible 4 colors.
  6.  *
  7.  * My appologies for the sparceness of comments.  It is hopefully clear
  8.  * what I was doing for the most part.
  9.  *
  10.  * This is meant to be compiled with the Manx compiler, and has not been
  11.  * tried under Lettuce.
  12.  *
  13.  * Permission is given to distribute this code wherever you want as long
  14.  * as this notice remains with it.  Do not use any part of it in a commercial
  15.  * application without written consent of the author:
  16.  *
  17.  * John M. Olsen
  18.  * 1547 Jamestown Drive
  19.  * Salt Lake City, UT  84121
  20.  ****************************************************************/
  21.  
  22. #include <exec/types.h>
  23. #include <graphics/gfxbase.h>
  24. #include <graphics/gfxmacros.h>
  25. #include <graphics/rastport.h>
  26. #include <intuition/intuition.h>
  27. #include <stdio.h>
  28.  
  29. void *OpenLibrary();
  30. struct Window *OpenWindow(), *w;
  31. struct IntuiMessage *GetMsg(), *msg;
  32.  
  33. struct IntuitionBase *IntuitionBase;
  34. struct GfxBase *GfxBase;
  35.  
  36. BYTE *AllocRaster();
  37. WORD areabuffer[250];
  38. struct TmpRas tmpras;
  39. struct AreaInfo myAreaInfo;
  40.  
  41. struct NewWindow ww =
  42. {                /****************/
  43.     0,            /* LeftEdge    */
  44.     10,            /* TopEdge    */
  45.     180,            /* Width    */
  46.     40,            /* Height    */
  47.     -1,            /* DetailPen    */
  48.     -1,            /* BlockPen    */
  49.     CLOSEWINDOW,        /* IDCMP    */
  50.     WINDOWCLOSE | ACTIVATE | NOCAREREFRESH | WINDOWDRAG | WINDOWDEPTH
  51.     | WINDOWSIZING,
  52.     NULL,            /* *FirstGadget    */
  53.     NULL,            /* *CheckMark    */
  54.     (UBYTE *)"Poly Window",    /* *Title    */
  55.     NULL,            /* Screen    */
  56.     NULL,            /* *Bitmap    */
  57.     180,20,640,400,        /* Min/Max w,h    */
  58.     WBENCHSCREEN        /* Type        */
  59. };
  60.  
  61. main(argc,argv)
  62. int argc;
  63. char *argv[];
  64. {
  65.     setup();
  66.     drawstuff();
  67.     die(0);
  68. }
  69.  
  70. setup()
  71. {
  72.     if(!(GfxBase = OpenLibrary("graphics.library",0l)))
  73.         die(1);
  74.     if(!(IntuitionBase = OpenLibrary("intuition.library", 0l)))
  75.         die(2);
  76.     if(!(w = OpenWindow(&ww)))
  77.         die(4);
  78.     InitArea(&myAreaInfo, areabuffer, 100l);
  79.     w->RPort->AreaInfo = &myAreaInfo;
  80.     tmpras.RasPtr = (BYTE *) AllocRaster(640l, 400l);
  81.     tmpras.Size = (long) RASSIZE(640l, 400l);
  82.     w->RPort->TmpRas = &tmpras;
  83. }
  84.  
  85. drawstuff()
  86. {
  87.     struct RastPort *r;
  88.     long colr = 0l, loop, x, y;    
  89.  
  90.     r = w->RPort;
  91.     msg = GetMsg(w->UserPort);
  92.     while(msg->Class != CLOSEWINDOW)
  93.     {
  94.         msg = GetMsg(w->UserPort);
  95.         SetAPen(r, colr);
  96.         SetBPen(r, colr);
  97.         colr++;
  98.         if(colr > 3l)
  99.             colr = 0l;
  100.         for(loop = 0l; loop < 10l; loop++)
  101.         {    /* define a vertex */
  102.             x = (long)random(w->Width - w->BorderLeft
  103.                 - w->BorderRight) + w->BorderLeft;
  104.             y = (long)random(w->Height - w->BorderTop
  105.                 - w->BorderBottom) + w->BorderTop;
  106.             if(loop == 0l)
  107.                 AreaMove(r, x, y);
  108.             else
  109.                 AreaDraw(r, x, y);
  110.         }
  111.         AreaEnd(r);
  112.     }
  113. }
  114.  
  115. /* A quick and dirty random number generator. */
  116. random(max)
  117. int max;
  118. {
  119.     static unsigned int num;
  120.  
  121.     num *= 3413;
  122.     num += 4321;
  123.     return(num % max);
  124. }
  125.  
  126. die(kind)
  127. int kind;
  128. {
  129.     static char *msgs[] = {    "",
  130.         /* err 1 */    "Unable to open graphics library.\n",
  131.         /* err 2 */    "Unable to open intuition library.\n",
  132.         /* err 4 */    "Unable to open a window.\n",
  133.                 "\n"
  134.                 };
  135.  
  136.     if(kind)        puts(msgs[kind]);
  137.     if(tmpras.RasPtr)    FreeRaster(tmpras.RasPtr,640l,400l);
  138.     if(w)            CloseWindow(w);
  139.     if(GfxBase)        CloseLibrary(GfxBase);
  140.     if(IntuitionBase)    CloseLibrary(IntuitionBase);
  141.     exit(kind);
  142. }
  143.